package alexico.operacion;

import alexico.AnalizadorLexico;
import alexico.Parametros;
import alexico.Token;
import alexico.TokenType;

//Define el tipo de la palabra, si es una palabra reservada o un identificador. Y retrocede el reader un espacio
//para no perder el caracter de corte
public class Operacion03 implements Operacion {

	@Override
	public void operar(Token t, char c, AnalizadorLexico al) {
		if( t.getCadena().equals("if"))
			t.setTipo(TokenType.IF);
		else if(t.getCadena().equals("then"))
			t.setTipo(TokenType.THEN);
		else if(t.getCadena().equals("else"))
			t.setTipo(TokenType.ELSE);
		else if(t.getCadena().equals("begin"))
			t.setTipo(TokenType.BEGIN);
		else if(t.getCadena().equals("end"))
			t.setTipo(TokenType.END);
		else if(t.getCadena().equals("print"))
			t.setTipo(TokenType.PRINT);
		else if(t.getCadena().equals("function"))
			t.setTipo(TokenType.FUNCTION);
		else if(t.getCadena().equals("return"))
			t.setTipo(TokenType.RETURN);
		else if(t.getCadena().equals("loop"))
			t.setTipo(TokenType.LOOP);
		else if (t.getCadena().equals("until"))
			t.setTipo(TokenType.UNTIL);
		else if(t.getCadena().equals("long"))
			t.setTipo(TokenType.LONG);
		else {
			t.setTipo(TokenType.IDENTIFICADOR);
			t.setCodigo_sintactico(257);
			if (t.getCadena().length() > Parametros.MAX_WORD_SIZE){
				al.agregarWarning("WARNING: "+"LINEA["+t.getLinea()+"] El largo de la variable "+t.getCadena()+" supera el maximo permitido");
				t.setCadena(t.getCadena().substring(0,Parametros.MAX_WORD_SIZE-1));
			}
//			if (!TablaDeSimbolos.exist(t.getCadena())){
//				Simbolo simbol=new Simbolo(t.getCadena(),"", "Variable");
//				TablaDeSimbolos.addSimbol(simbol);
//			}
		}
		al.volver();
	}
}